package com.ruoyi.system.utils;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * ID生成工具类，生成格式为 sh-日期-编号 的字符串ID
 */
public class IdGenerator {
    // 计数器，确保同一天内编号唯一
    private static final AtomicInteger COUNTER = new AtomicInteger(1);
    // 日期格式化器，格式为yyyyMMdd
    private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyyMMdd");
    // 记录上一次生成ID的日期，用于重置计数器
    private static String lastDate;

    /**
     * 生成格式为 sh-日期-编号 的ID
     * @return 生成的ID字符串
     */
    public static synchronized String generateId() {
        // 获取当前日期字符串
        String currentDate = DATE_FORMAT.format(new Date());

        // 如果是新的一天，重置计数器
        if (!currentDate.equals(lastDate)) {
            COUNTER.set(1);
            lastDate = currentDate;
        }

        // 获取当前计数并自增
        int sequence = COUNTER.getAndIncrement();

        // 拼接ID：sh-日期-编号
        return String.format("sh-%s-%d", currentDate, sequence);
    }

    // 测试方法
    public static void main(String[] args) {
        // 生成10个示例ID
        for (int i = 0; i < 10; i++) {
            System.out.println(generateId());
        }
    }
}
